

package com.base.commons.elasticsearch.service;


import com.base.commons.elasticsearch.dao.EsBaseDao;
import org.frameworkset.elasticsearch.ElasticSearchException;
import org.frameworkset.elasticsearch.entity.ESDatas;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 基础服务接口，所有Service接口都要继承
 *
 * @author carl
 * @since 1.0.0
 */
public interface EsBaseService<T> {
    /**
     * es 查询后缀
     */
    String _SEARCH ="/_search";
    /**
     * es 求和查询条件
     */
    String COUNT ="count";
    /**
     * es 分页查询条件
     */
    String SEARCH_PAGING_DATA ="searchPagineDatas";

    /**
     * 查询最大数量为10000
     */
    int DEFAULT_ES_SIZE = 10000;
    /**
     * 默认导出数据量
     */
    int DEFAULT_EXPORT_ES_SIZE=1000000;
    /**
     * 查询分页返回条数
     */
    String SIZE="size";
    /**
     * 文档基本类型
     */
    String ELASTICSEARCH_TYPE = "_doc";
    /**
     * 滚动查询条件
     */
     String SCROLL_DEFAULT_QUERY = "scrollQuery";
    /**
     * 缓存时间默认 10分钟，自动清理
     */
    String SCROLL="10m";
    /**
     * esdao 后最
     */
    String SUFFIX="_dao";
    /**
     * 根据ids 查询列表
     * @param idList  ids 列表
     * @return
     */
    List<T> selectBatchIds(Collection<? extends Serializable> idList);

    /**
     * 批量插入数据
     * @param entityList
     * @return
     */
    String insertBatch(List<T> entityList);

    /**获取所有数据
     * @param paramMap  筛选条件
     * @return
     */
    long selectCount(Map<String, Object> paramMap);

    /**根据条件查询返回列表
     * @param paramMap 筛选条件
     * @return
     */
    ESDatas<T> searchList(Map<String, Object> paramMap);

    /** 根据滚动条件查询列表
     * @param paramMap  筛选条件
     * @return
     */
    ESDatas<T> searchListScroll(Map<String, Object> paramMap);

    /**根据滚动id 查询下一页
     * @param scroll 缓存保存时间：默认10m
     * @param scrollId   滚动id
     * @return
     */
    ESDatas<T> searchScroll(String scroll,String scrollId);

    /** 根据scrollId，清理缓存
     * 清理scrollId
     * @param scrollIds  缓存id
     * @return
     * @throws ElasticSearchException
     */
    String deleteScrolls(Set<String> scrollIds) throws ElasticSearchException;
    /**
     * 获取对应 entity 的 BaseMapper
     *
     * @return BaseMapper
     */
    EsBaseDao<T> getBaseMapper();
}